package com.yzlshdg.config;

import org.apache.ibatis.annotations.Mapper;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

import javax.sql.DataSource;

/**
 * 配置类  。。在SpringBoot整合JavaFX中，使用操作数据库的框架，会有问题。可能是序之间的通信的问题
 *    使用这个配置类，来解决数据库持久层注入为null的问题。 这个配置注入的是 JdbcTemplate
 *
 *    一个Spring配置类，用于配置数据源和JdbcTemplate
 */
//@Configuration注解表示该类是一个配置类，Spring容器会根据此类来创建并管理Bean
@Configuration
public class DataSourceConfig {

    //@Value注解用于从外部属性文件（比如application.properties）中读取配置值并注入到对应的变量中。
    // 在这里，它用于注入数据库连接的URL、用户名、密码和驱动类名
    @Value("${spring.datasource.url}")
    private String url;

    @Value("${spring.datasource.username}")
    private String username;

    @Value("${spring.datasource.password}")
    private String password;

    @Value("${spring.datasource.driver-class-name}")
    private String driverClassName;

    //@Bean注解用于声明一个Bean，并将其添加到Spring容器中
    @Bean
    public DataSource dataSource() {
        //dataSource()方法返回一个DriverManagerDataSource对象，
        // 用于配置数据库连接信息，包括URL、用户名、密码和驱动类。
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        dataSource.setDriverClassName(driverClassName);
        return dataSource;
    }

    //jdbcTemplate()方法接受一个DataSource对象作为参数，并返回一个JdbcTemplate对象。
    // JdbcTemplate是Spring提供的操作数据库的工具类，通过传入数据源，可以方便地执行SQL语句
    @Bean
    public JdbcTemplate jdbcTemplate(DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }

}